home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Games Machine 76
/
XENIATGM66.iso
/
Indiana Jones
/
Indiana Jones.exe
/
RESOURCE
/
PREVIEW.GOB
/
cog_bab_commie_grid.cog
< prev
next >
Wrap
Text File
|
1999-11-15
|
17KB
|
554 lines
# Jones 3D Cog Script
#
# BAB_Courtyard_Grid_1.cog
#
# [JM]
#
# (C) 1999 LucasArts Entertainment Company LLC. All Rights Reserved
#
# ========================================================================================
symbols
message startup
message killed
message entered
message activated
message crossed
message user0
message user1
message user2
# ========================== SUBROUTINES ================================
flex MakeGrid local
flex EnableAI local
flex DisableAI local
flex AfterTurner local
flex AfterLeverPull local
flex MakeRoom local
# ============================= WORLD REFERENCES ========================
sector EnableGrid LinkID=1 mask=0x4
sector DisableGrid LinkID=2
sector TurnerCheck LinkID=3
surface HideCommie00 LinkID=4
surface WakeCommie00 LinkID=5
surface WakeCommie01 LinkID=5
thing generator
thing CommieTeleporter
# =========================== MISC LOCAL VARIABLES ======================
int counter local
int CommiesUsingWpnts=0 local
int IsGridOn=0 local
int LeverHasBeenPulled=0 local
int TurnerHasArrived=0 local
int SetCommieFlags=0 local
#For the above variables: 0 = off and 1 = on
int BackRouteTaken=0 local
int TheBattleHasStarted=0 local
AI AI_Sniper=com_2Hsniper.ai local
# =========================== CONSTANTS =================================
int MAX_COMMIES_USING_WPNTS=10 local
int CLEAR_WAYPOINTS=60 local
int NUMBER_OF_WAYPOINTS=27 local
int NUMBER_OF_COMMIES_TOTAL=9 local
int NUMBER_COMMIES_AFTER_TURNER=2 local
int NUMBER_OF_PATROLLERS=1 local
int NUMBER_OF_GUARDS=3 local
int NUMBER_OF_SNIPERS=1 local
int NUMBER_OF_LEVER_COMMIES=2 local
int SNIPER_FLAG=0 local
# =========================== COMMIES ===================================
thing TempCommie local
thing Sniper00 mask=0x448 //allow to recieve a killed message from friendly fire and explosions
thing AfterTurnerCommie00 mask=0x448
thing AfterTurnerCommie01 mask=0x448
thing PatrollingCommie00 mask=0x448
thing GuardingCommie00 mask=0x448
thing GuardingCommie01 mask=0x448
thing GuardingCommie02 mask=0x448
thing AfterLeverCommie00 mask=0x448
thing AfterLeverCommie01 mask=0x448
thing snipertarget
sector snipersector
thing player local
# ==================== WAYPOINTS - GHOST OBJECTS ========================
thing TempWpnt
thing Wpnt00
thing Wpnt01
thing Wpnt02
thing Wpnt03
thing Wpnt04
thing Wpnt05
thing Wpnt06
thing Wpnt07
thing Wpnt08
thing Wpnt09
thing Wpnt10
thing Wpnt11
thing Wpnt12
thing Wpnt13
thing Wpnt14
thing Wpnt15
thing Wpnt16
thing Wpnt17
thing Wpnt18
thing Wpnt19
thing Wpnt20
thing Wpnt21
thing Wpnt22
thing Wpnt23
thing Wpnt24
thing Wpnt25
thing Wpnt26
# =======================================================================
end
# =======================================================================
# ============================= CODE ====================================
# =======================================================================
code
# =======================================================================
startup:
for(counter = 0; counter < NUMBER_COMMIES_AFTER_TURNER; counter = counter + 1)
{
//These guys don't show up until after the turner cutscene
SetThingFlags(AfterTurnerCommie00[counter], 0x80000);
SetActorFlags(PatrollingCommie00, 0x400);
SetActorFlags(PatrollingCommie00, 0x800);
}
for(counter = 0; counter < NUMBER_OF_SNIPERS; counter = counter + 1)
{
if(Sniper00[counter] != -1)
{
AISetClass(Sniper00[counter], AI_sniper);
}
}
player=GetLocalPlayerThing();
return;
# =======================================================================
killed:
TempCommie = GetSenderRef();
for(counter = 0; counter < (NUMBER_OF_COMMIES_TOTAL - 1); counter = counter + 1)
{
if(AfterTurnerCommie00[counter] == TempCommie)
{
AfterTurnerCommie00[counter] = -1;
if(TheBattleHasStarted == 1)
{
CommiesUsingWpnts = CommiesUsingWpnts - 1;
PrintInt(CommiesUsingWpnts);
}
}
}
if(TempCommie == Sniper00)
{
Sniper00 = -1;
SNIPER_FLAG=1;
}
return;
# =======================================================================
entered:
if(GetSenderID() == 1 && IsGridOn == 0)
{
Call MakeGrid;
IsGridOn = 1;
}
else if(GetSenderID() == 2 && IsGridOn == 1)
{
Call DisableAI;
IsGridOn = 0;
}
else if(GetSenderID() == 3 && TurnerHasArrived == 0) //Start of Turner Introduction cinematic
{
Call DisableAI;
}
if ((GetSenderRef() == snipersector) && (SNIPER_FLAG == 0) && (GetSourceRef() == player))
{
TeleportThing(sniper00, snipertarget);
}
return;
# =======================================================================
activated:
if(GetSenderRef() == Generator && LeverHasBeenPulled == 0)
{
SetCommieFlags = 1;
Call DisableAI;
}
return;
# =======================================================================
crossed:
if(PatrollingCommie00 == -1) return;
if(GetSenderID() == 4)
{
TeleportThing(PatrollingCommie00, CommieTeleporter);
AIEnableInstinct(PatrollingCommie00, "roam", 0);
AISetCutsceneMode(PatrollingCommie00);
}
if(GetSenderID() == 5)
{
AIClearCutsceneMode(PatrollingCommie00);
AIEnableInstinct(PatrollingCommie00, "roam", 1);
ClearActorFlags(PatrollingCommie00, 0x800);
ClearActorFlags(PatrollingCommie00, 0x400);
BackRouteTaken = 1;
}
return;
# =======================================================================
//Recieves this message from BAB_CourtyardCommie. cog. Expects all commies to taken out of cutscene mode
user0:
Call EnableAI;
TheBattleHasStarted = 1;
return;
# =======================================================================
//Recieves a message from BAB_GeneratorPull.cog
user1:
Call AfterLeverPull;
Call EnableAI;
LeverHasBeenPulled = 1;
return;
# =======================================================================
//Revieves a message from the Turner introduction cutscene 01_BAB_Cinematic3.cog
user2:
Call AfterTurner;
Call EnableAI;
TurnerHasArrived = 1;
return;
# =======================================================================
# =========================== SUBROUTINES ===============================
# =======================================================================
EnableAI:
//Guarding Commies
for(counter = 0; counter < NUMBER_OF_GUARDS; counter = counter + 1)
{
if(GuardingCommie00[counter] != -1)
{
AIClearCutsceneMode(GuardingCommie00[counter]);
AISetInstinctWpntMode(GuardingCommie00[counter]);
CommiesUsingWpnts = CommiesUsingWpnts + 1;
//PrintInt(CommiesUsingWpnts);
if(SetCommieFlags == 1);
{
ClearThingFlags(GuardingCommie00[counter], 0x80000);
}
}
}
//Roaming Commies
for(counter = 0; counter < NUMBER_OF_PATROLLERS; counter = counter + 1)
{
if(PatrollingCommie00[counter] != -1)
{
AIClearCutsceneMode(PatrollingCommie00[counter]);
AISetInstinctWpntMode(PatrollingCommie00[counter]);
CommiesUsingWpnts = CommiesUsingWpnts + 1;
//PrintInt(CommiesUsingWpnts);
if(BackRouteTaken == 1)
{
AIEnableInstinct(PatrollingCommie00[counter], "roam", 1);
}
if(SetCommieFlags == 1);
{
ClearThingFlags(PatrollingCommie00[counter], 0x80000);
}
}
}
//Snipers
if(LeverHasBeenPulled == 1)
{
for(counter = 0; counter < NUMBER_OF_LEVER_COMMIES; counter = counter + 1)
{
if(AfterLeverCommie00[counter] != -1)
{
AIClearCutsceneMode(AfterLeverCommie00[counter]);
AISetInstinctWpntMode(AfterLeverCommie00[counter]);
CommiesUsingWpnts = CommiesUsingWpnts + 1;
//PrintInt(CommiesUsingWpnts);
if(SetCommieFlags == 1);
{
ClearThingFlags(AfterLeverCommie00[counter], 0x80000);
}
}
}
}
return;
# =======================================================================
DisableAI:
//Guarding Commies
for(counter = 0; counter < NUMBER_OF_GUARDS; counter = counter + 1)
{
if(GuardingCommie00[counter] != -1)
{
AISetCutsceneMode(GuardingCommie00[counter]);
CommiesUsingWpnts = CommiesUsingWpnts - 1;
//PrintInt(CommiesUsingWpnts);
if(SetCommieFlags == 1);
{
SetThingFlags(GuardingCommie00[counter], 0x80000);
}
}
}
//Roaming Commies
for(counter = 0; counter < NUMBER_OF_PATROLLERS; counter = counter + 1)
{
if(PatrollingCommie00[counter] != -1)
{
AISetCutsceneMode(PatrollingCommie00[counter]);
CommiesUsingWpnts = CommiesUsingWpnts - 1;
//PrintInt(CommiesUsingWpnts);
if(BackRouteTaken == 1)
{
AIEnableInstinct(PatrollingCommie00[counter], "roam", 0);
}
if(SetCommieFlags == 1);
{
SetThingFlags(PatrollingCommie00[counter], 0x80000);
}
}
}
//Commies that show up after the turner cutscene
if(TurnerHasArrived == 1)
{
for(counter = 0; counter < NUMBER_COMMIES_AFTER_TURNER; counter = counter + 1)
{
if(AfterTurnerCommie00[counter] != -1)
{
AIEnableInstinct(AfterTurnerCommie00[counter], "roam", 0);
AISetCutsceneMode(AfterTurnerCommie00[counter]);
CommiesUsingWpnts = CommiesUsingWpnts - 1;
//PrintInt(CommiesUsingWpnts);
if(SetCommieFlags == 1);
{
SetThingFlags(AfterTurnerCommie00[counter], 0x80000);
}
}
}
}
if(LeverHasBeenPulled == 1)
{
for(counter = 0; counter < NUMBER_OF_LEVER_COMMIES; counter = counter + 1)
{
if(AfterLeverCommie00[counter] != -1)
{
AIClearInstinctwpntMode(AfterLeverCommie00[counter]);
AISetCutsceneMode(AfterLeverCommie00[counter]);
CommiesUsingWpnts = CommiesUsingWpnts - 1;
//PrintInt(CommiesUsingWpnts);
if(SetCommieFlags == 1);
{
SetThingFlags(AfterLeverCommie00[counter], 0x80000);
}
}
}
}
return;
# =======================================================================
AfterTurner:
Sleep(1.0);
for(counter = 0; counter < NUMBER_COMMIES_AFTER_TURNER; counter = counter + 1)
{
if(CommiesUsingWpnts >= 10)
{
Call MakeRoom;
}
ClearThingFlags(AfterTurnerCommie00[counter], 0x80000);
AISetInstinctWpntMode(AfterTurnerCommie00[counter]);
AIEnableInstinct(AfterTurnerCommie00[counter], "roam", 1);
AIWpntHuntTarget(AfterTurnerCommie00[counter], 2.0, 0.0);
CommiesUsingWpnts = CommiesUsingWpnts + 1;
//PrintInt(CommiesUsingWpnts);
sleep(1.0);
}
return;
# =======================================================================
AfterLeverPull:
for(counter = 0; counter < NUMBER_OF_LEVER_COMMIES; counter = counter + 1)
{
AISetInstinctWpntMode(AfterLeverCommie00[counter]);
CommiesUsingWpnts = CommiesUsingWpnts + 1;
//PrintInt(CommiesUsingWpnts);
}
for(counter = 0; counter < NUMBER_OF_GUARDS; counter = counter + 1)
{
if(GuardingCommie00[counter] != -1)
{
AIEnableInstinct(GuardingCommie00[counter], "roam", 1);
if((RandBetween(0, 3) == 3))
{
AIWpntHuntTarget(GuardingCommie00[counter], 2.0, 0.0);
}
}
}
return;
# =======================================================================
//It is possible for their to be 10 commies using the grid by this point, this subroutine clears as many as needed
MakeRoom:
for(counter = 0; counter < NUMBER_OF_GUARDS; counter = counter + 1)
{
if(CommiesUsingWpnts == (MAX_COMMIES_USING_WPNTS - NUMBER_COMMIES_AFTER_TURNER)) return;
if(GuardingCommie00[counter] != -1)
{
AIClearInstinctWpntMode(GuardingCommie00[counter]);
AIEnableInstinct(GuardingCommie00[counter], "roam", 0);
CommiesUsingWpnts = CommiesUsingWpnts - 1;
//PrintInt(CommiesUsingWpnts);
}
}
return;
# =======================================================================
MakeGrid:
for(counter = 0; counter < CLEAR_WAYPOINTS; counter = counter + 1)
{
//For loop to clear any pre-existing waypoints
AISetWpnt(TempWpnt, counter);
}
for(counter = 0; counter < NUMBER_OF_WAYPOINTS; counter = counter + 1)
{
AISetWpnt(Wpnt00[counter], counter);
}
AIConnectWpnts(0, 1);
AIConnectWpnts(1, 2);
AIConnectWpnts(1, 5);
AIConnectWpnts(2, 3);
AIConnectWpnts(2, 4);
AIConnectWpnts(3, 24);
AIConnectWpnts(4, 5);
AIConnectWpnts(4, 25);
AIConnectWpnts(5, 25);
AIConnectWpnts(5, 24);
AIConnectWpnts(6, 7);
AIConnectWpnts(6, 24);
AIConnectWpnts(6, 25);
AIConnectWpnts(7, 8);
AIConnectWpnts(8, 9);
AIConnectWpnts(9, 10);
AIConnectWpnts(10, 11);
AIConnectWpnts(10, 13);
AIConnectWpnts(10, 14);
AIConnectWpnts(11, 12);
//AIConnectWpnts(14, 15); //Commented out... 1/2 meter ledge prevents movement
//AIConnectWpnts(14, 16); //Commented out... 1/2 meter ledge prevents movement
AIConnectWpnts(16, 17);
AIConnectWpnts(17, 18);
AIConnectWpnts(17, 19);
AIConnectWpnts(19, 20);
AIConnectWpnts(20, 21);
AIConnectWpnts(20, 22);
AIConnectWpnts(22, 23);
AIConnectWpnts(25, 26);
return;
# =======================================================================
end